package com.longtop.framework.sys.flow.web;

import java.util.HashMap;

import org.apache.commons.lang.StringUtils;

import com.longtop.framework.base.BaseAction;
import com.longtop.framework.base.BaseService;
import com.longtop.framework.common.QueryConditions;
import com.longtop.framework.common.QueryResult;
import com.longtop.framework.security.SessionObject;
import com.longtop.framework.sys.flow.service.FlowTemplateService;
import com.longtop.framework.util.BeanUtil;
import com.longtop.framework.util.SpringBeanFactory;
import com.longtop.framework.util.StringUtil;
import com.longtop.framework.util.WebUtil;
import com.longtop.intelliweb.action.IActionContext;
import com.longtop.intelliweb.action.IInitContext;
import com.longtop.intelliweb.view.Dataset;

/**
 * 
 * @author 杨向阳
 * 
 */

public class FlowInstanceListAction extends BaseAction {

	private final static String DATASET_FLOW_INSTANCE = "Dataset_FlowInstance";
	private final static String DATASET_FLOW_TEMPLATE = "Dataset_FlowTemplate";

	/**
	 * 系统共用：初始化调用
	 */
	public void init(IInitContext context) {
		super.init(context);
	}

	/**
	 * 本页jsp：初始化业务数据(覆写父类方法)
	 */
	public void thisPageInit(IInitContext context) {
		// 调用公用查询方法
		commonQuery(context, false);

		// String templateId = StringUtil.getString(context.getRequest().getParameter("templateId"));
		//		
		// if(StringUtils.isEmpty(templateId))
		addTemplateDropDown(context);
	}

	/**
	 * 自定义查询
	 * 
	 * @param context
	 */
	public void searchFlowInstance(IActionContext context) {

		// 调用公用查询方法
		commonQuery(context, true);
	}

	/**
	 * 执行翻页查询
	 * 
	 * @param context
	 */
	public void loadFlowInstance(IActionContext context) {

		// 调用公用查询方法
		commonQuery(context, false);
	}

	/**
	 * 通用查询.将数据查询出来，拼装数据。
	 * 
	 * @param object
	 *            上下文：IInitContext或IActionContext
	 * @param isFirstPageNoo
	 *            是否从第一页开始查询！
	 */
	private void commonQuery(Object object, boolean isFirstPageNo) {
		String templateId = "";

		BaseService baseService = getBean(BaseService.BEAN_ID); // 调用Spring的业务逻辑类
		QueryConditions queryConditions = WebUtil.createQueryConditions(); // 查询条件辅助类

		// 获取dataset,验证数据集对象是否存在
		Dataset dataset = this.getDataset(object, DATASET_FLOW_INSTANCE);
		if (!WebUtil.validateDatasetExist(this, dataset, DATASET_FLOW_INSTANCE)) {
			return;
		}
		HashMap hashMap = new HashMap(); // ibatis查询的参数条件
		// 判断是否是由 init方法 调用
		hashMap.put("relation", "1");
		if (object instanceof IActionContext) {
			IActionContext context = (IActionContext) object;

			// 取得界面传入的查询条件(必须设置command的submitForm=true)
			if (StringUtils.isEmpty(templateId)) {
				templateId = context.getElementValue("Text_TemplateId"); // 模板id
			}

			String launcher = context.getElementValue("Text_Launcher");
			String status = context.getElementValue("Text_Status");
			String relation = context.getElementValue("Text_Relation");

			hashMap.put("launcher", launcher); // 流程申请人
			hashMap.put("status", status);
			hashMap.put("relation", relation); // 流程状态
		} else {
			IInitContext context = (IInitContext) object;
			templateId = StringUtil.getString(context.getRequest().getParameter("templateId"));
		}

		SessionObject sessionObject = getSessionObject(object);
		hashMap.put("userId", sessionObject.getUserId());
		hashMap.put("templateId", templateId);

		// 当前第几页
		int pageNo = 1;
		if (!isFirstPageNo)
			pageNo = dataset.getPageNo();

		// 每页多少条记录
		int pageSize = dataset.getPageSize();

		// 调用service层，依据条件查询第一页记录，并获取总页数
		// System.out.println(hashMap);
		queryConditions.setParameter("sysFlowInstanceSql.selectFlowInstanceList", "sysFlowInstanceSql.selectFlowInstanceListCount", hashMap);
		QueryResult queryResult = baseService.queryForPageByIbatis(queryConditions, pageNo, pageSize);
		BeanUtil.queryResultToDataset(queryResult, dataset, false, true);
	}

	/**
	 * 加载流程模板
	 * 
	 * @param context
	 */
	private void addTemplateDropDown(IInitContext context) {

		// 获取页面上的Dataset的结构
		Dataset dataset = context.getDataset(DATASET_FLOW_TEMPLATE);
		// 验证数据集对象是否存在
		if (!WebUtil.validateDatasetExist(this, dataset, DATASET_FLOW_TEMPLATE)) {
			return;
		}
		// 调用Spring的业务逻辑类
		FlowTemplateService templateService = SpringBeanFactory.getBean(FlowTemplateService.BEAN_ID);

		// 设置查询条件列表
		QueryConditions queryConditions = WebUtil.createQueryConditions();

		// 调用service层，依据条件查询第一页记录，并获取总页数
		QueryResult queryResult = templateService.loadTemplate(queryConditions, 1, -1);

		try {
			BeanUtil.queryResultToDataset(queryResult, dataset, false, true);
		} catch (Exception e) {
			e.printStackTrace();
			hintErrorMessage(e.getMessage());
		}
		if (dataset != null && dataset.size() > 0) {
			dataset.move(0);
			// dataset.insertRecord(0);
		}
	}

}